package com.kwin;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolAbstract;
import redis.clients.jedis.JedisPoolConfig;

public class TestJedisPool {
    public static void main(String[] args) {
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //资源池最大连接数
        jedisPoolConfig.setMaxTotal(200);                  //默认8
        //资源池允许的最大空闲连接数
        jedisPoolConfig.setMaxIdle(200);                   //默认8
        //资源池确保的最大空闲连接数
        jedisPoolConfig.setMinIdle(1);                     //默认0
        //资源池用尽后，调用者是否等待，只有当值为 true 时 MaxWaitMillis 才生效
        jedisPoolConfig.setBlockWhenExhausted(true);       //默认 true，建议开启
        //资源池用尽后，调用者的最大等待时间(单位为毫秒)
        jedisPoolConfig.setMaxWaitMillis(60000);           //默认 -1,永不超时,建议修改
        //向资源池借用连接时是否做有效连接检测(ping)。检测到的无效连接会被移除
        jedisPoolConfig.setTestOnBorrow(false);            //默认 false，业务量很大时建议关闭
        //向资源池归还连接时是否做有效连接检测(ping)。检测到的无效连接会被移除
        jedisPoolConfig.setTestOnReturn(false);            //默认 false，业务量很大时建议关闭
        //是否开启JMX监控，建议开启，注意应用本身也要开启
        jedisPoolConfig.setJmxEnabled(true);               //默认 true

        //是否在空闲资源检测时通过ping检测连接有效性，无效连接销毁
        jedisPoolConfig.setTestWhileIdle(false);           //默认 false,建议 true
        //空闲资源的检测周期(单位毫秒)
        jedisPoolConfig.setTimeBetweenEvictionRunsMillis(-1);    //默认-1(不检测),建议设置,参考值30000
        //资源池中资源最小空闲时间(单位毫秒),达到该值后资源被移除
        jedisPoolConfig.setMinEvictableIdleTimeMillis(1800000);  //默认1800000(30分钟),可以默认也可以改.参考值60000
        //做空闲检测时,每次检测资源的个数
        jedisPoolConfig.setNumTestsPerEvictionRun(3);            //默认3，设置为-1就是对所有连接做空闲检测

        JedisPool jedisPool = new JedisPool(jedisPoolConfig, "127.0.0.1", 6379, 60000);
        Jedis jedis = jedisPool.getResource();

        System.out.println(jedis.ping());
        jedis.close();
        jedisPool.close();

        System.out.println("测试成功");
    }
}
